package com.ruoyi.ws.utils;

/**
 * 包装辅助类.
 *
 * @author lijianzhong
 * @version 2014-9-9 下午1:56:53
 */
public class WrapMapper {

  /**
   * Instantiates a new wrap mapper.
   */
  // private WrapMapper() {
  // }

  /**
   * Wrap.
   *
   * @param <E>
   *            the element type
   * @param code
   *            the code
   * @param message
   *            the message
   * @param o
   *            the o
   * @return the wrapper
   */
  public static <E> Wrapper<E> wrap(int code, String message, E o) {
    return new Wrapper<E>(code, message, o);
  }

  /**
   * Wrap.
   *
   * @param <E>
   *            the element type
   * @param code
   *            the code
   * @param message
   *            the message
   * @return the wrapper
   */
  public static <E> Wrapper<E> wrap(int code, String message) {
    return wrap(code, message, null);
  }

  /**
   * Wrap.
   *
   * @param <E>
   *            the element type
   * @param code
   *            the code
   * @return the wrapper
   */
  public static <E> Wrapper<E> wrap(int code) {
    return wrap(code, null);
  }

  /**
   * Wrap.
   *
   * @param <E>
   *            the element type
   * @param e
   *            the e
   * @return the wrapper
   */
  public static <E> Wrapper<E> wrap(Exception e) {
    return new Wrapper<E>(Wrapper.ERROR_CODE, e.getMessage());
  }

  /**
   * Un wrapper.
   *
   * @param <E>
   *            the element type
   * @param wrapper
   *            the wrapper
   * @return the e
   */
  public static <E> E unWrap(Wrapper<E> wrapper) {
    return wrapper.getResult();
  }

  /**
   * Wrap ILLEGAL_ARGUMENT. code=100
   *
   * @param <E>
   *            the element type
   * @return the wrapper
   */
  public static <E> Wrapper<E> illegalArgument() {
    return wrap(Wrapper.ILLEGAL_ARGUMENT_CODE, Wrapper.ILLEGAL_ARGUMENT_MESSAGE);
  }

  /**
   * Wrap TIME_OUT. code=110
   *
   * @param <E>
   *            the element type
   * @return the wrapper
   */
  public static <E> Wrapper<E> timeOut() {
    return wrap(Wrapper.TIME_OUT_CODE, Wrapper.TIME_OUT_MESSAGE);
  }

  /**
   * Wrap SECURE_FAIL. code=120
   *
   * @param <E>
   *            the element type
   * @return the wrapper
   */
  public static <E> Wrapper<E> secureFail() {
    return wrap(Wrapper.SECURE_FAIL_CODE, Wrapper.SECURE_FAIL_MESSAGE);
  }

  /**
   * Wrap SUCCESS. code=200
   *
   * @param <E>
   *            the element type
   * @return the wrapper
   */
  public static <E> Wrapper<E> ok() {
    return new Wrapper<E>();
  }

  /**
   * Wrap ERROR. code=500
   *
   * @param <E>
   *            the element type
   * @return the wrapper
   */
  public static <E> Wrapper<E> error() {
    return wrap(Wrapper.ERROR_CODE, Wrapper.ERROR_MESSAGE);
  }
}
